package com.example.demo.testcontroller;

import com.example.demo.a.A;
import com.example.demo.base.B;
import com.example.demo.base.BaseControl;
import com.example.demo.router.MyStrategyRoute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

/**
 * @author masc
 * @date 2022-09-07 16:20
 * <p></p>
 */
@RestController
@RequestMapping(value = "/mytest")
public class myTest {
    @Autowired
    private MyStrategyRoute myStrategyRoute;

    @RequestMapping("/test")
    public void test() {
        Optional<BaseControl> optional = myStrategyRoute.getVariantControl(1); //找到的是AControl
        B b = null;
        if (optional.isPresent()) {
            b = (B) optional.get().queryVariant("我在哪里打印了？"); // 可以统一用B 来接  因为 1 和3 都继承了 B类
//            b.getAa(); 有Aa的值 但是取不出来的 需要强转
        }
        // 上一步查询到的是A类的详情，传递的是引用，虽然B类没有aa这个字段，当B转换成A的时候  仍然能获取到aa
//        A a = (A) b;  // 需要注意 A和C都继承了B  但是A和C互转 会出现异常
//        System.out.println(a.getBb());
//        System.out.println(a.getAa());

        // 更新对象
        // 传入的是个B对象 但是带着A对象（或C对象）的属性 ，因此可以更新A（或C）的所有属性
        // 如果要更新B对象  需要使用supper显示调用，见A的方法
        optional.get().updateTest(b);


    }

}
